// #pragma order
#include "modbus.h"
#include "user_global.h"
#include "user_config.h"
#include "freq_table.h"
// modbus 寄存器变量定义
//==========================================================
// RO-BIT
//==========================================================

RO_BIT ro_bit =
{
        0,
};

//==========================================================
// RW-BIT
//==========================================================
RW_BIT rw_bit =
{
        0, // 0000 启动左缓冲试管架队列推入. 1: 启动; 0: 停止
        0, // 0001 检测到该值为1时停止trans_out，为0 时无效
        0, // 0002 启动右缓冲试管架队列推入. 1: 启动; 0: 停止
        0, // 0003 启动停止条码扫描. 1:启动; 0:停止
        0, // 0004 BEEP. 1:启动; 0:停止
        0, // 0005 检测到按键长按置1，由软件清除
        0, // 0006 检测到按键长按置1，由软件清除
        0, // 0007 禁止或暂停按钮触发动作
        0, // 0008 禁止或暂停按钮触发动作
};

//==========================================================
// RO-WORD
//==========================================================

RO_LONG_ADD ro_long_addL[12] = {
    S1_POS_L,
    S2_POS_L,
    V1_POS_L,
    V2_POS_L,
    V3_POS_L,
    T1_POS_L,
    S1_DISTANCE_L,
    S2_DISTANCE_L,
    V1_DISTANCE_L,
    V2_DISTANCE_L,
    V3_DISTANCE_L,
    T1_DISTANCE_L,
};

RO_LONG_ADD ro_long_addH[12] = {
    S1_POS_H,
    S2_POS_H,
    V1_POS_H,
    V2_POS_H,
    V3_POS_H,
    T1_POS_H,
    S1_DISTANCE_H,
    S2_DISTANCE_H,
    V1_DISTANCE_H,
    V2_DISTANCE_H,
    V3_DISTANCE_H,
    T1_DISTANCE_H,
};

RO_CHAR rochar[RO_CHAR_COUNT] = {
    {0x03, 0x3A},
    {0x5C, 0x6F}};

RO_WORD ro_word =
    {
        0};

//==========================================================
// RW-WORD
//==========================================================

RW_LONG_ADD rw_long_addL[6] = {

    S1_MAX_DISTANCE_L,
    S2_MAX_DISTANCE_L,
    V1_MAX_DISTANCE_L,
    V2_MAX_DISTANCE_L,
    V3_MAX_DISTANCE_L,
    T1_MAX_DISTANCE_L,
};

RW_LONG_ADD rw_long_addH[6] = {
    S1_MAX_DISTANCE_H,
    S2_MAX_DISTANCE_H,
    V1_MAX_DISTANCE_H,
    V2_MAX_DISTANCE_H,
    V3_MAX_DISTANCE_H,
    T1_MAX_DISTANCE_H,
};

RW_WORD rw_word =
{
        0,   // 0000    当前执行指令
        {0}, // 0001/16 ACTION参数
        {0}, // 0011
        0,   // 0012
        {
            V3_SCAN_POS1_STEP, // 0013 scan_pos1样本扫码定位位置
            V3_SCAN_POS2_STEP, // 0014 scan_pos2样本扫码定位位置
            V3_SCAN_POS3_STEP, // 0015 scan_pos3样本扫码定位位置
            V3_SCAN_POS4_STEP, // 0016 scan_pos4样本扫码定位位置
            V3_SCAN_POS5_STEP  // 0017 scan_pos5样本扫码定位位置
        },
        2830, // 0018 r2_desc_step
        {0}, // 0019/8  应用参数
        {
            {
                314 * 12, // 0021     S1_MAX_SPEED               S1 最高速度 0.01 rad/sec
                6800      // 0022/2   S1_MAX_DISTANCE            S1 最大行程, 步.
            },
            {
                314 * 12, // 0024     S2_MAX_SPEED               S2 最高速度 0.01 rad/sec
                6800      // 0025/2   S2_MAX_DISTANCE            S2 最大行程, 步.
            },
            {
                1000, // 0027     V1_MAX_SPEED               V1 最高速度 0.01 rad/sec
                300  // 0028/2   V1_MAX_DISTANCE            V1 最大行程, 步.
            },
            {
                1000, // 002A     V2_MAX_SPEED               V2 最高速度 0.01 rad/sec
                300   // 002B/2   V2_MAX_DISTANCE            V2 最大行程, 步.
            },
            {
                314 * 20, // 002D     V3_MAX_SPEED               V3 最高速度 0.01 rad/sec
                -1900     // 002E/2   V3_MAX_DISTANCE            V3 最大行程, 步.
            },
            {
                314 * 3, // 0030     T1_MAX_SPEED               T1 最大速度, 0.01 rad/sec
                0x8fff   // 0031/2   T1_MAX_DISTANCE            T1 最大行程
            },
            {
                314 * 8, // 0033     R1_MAX_SPEED               R1 最高速度2 复位速度 0.01 rad/sec
                8800 * 1 // 0034/2   R1_MAX_DISTANCE            R1 最大行程
            },
            {
                314 * 40,// 0035     R2_MAX_SPEED               T1 最大速度2, 第二阶段(信息获取段)速度0.01 rad/sec
                5000            // 0035     R2_MAX_DISTANCE            T1 最大行程
            },
        },
        4000,                  // 0033     S1_MAX_SPEED_2             S1 最高速度2 复位速度 0.01 rad/sec^2
        4000,                  // 0034     S2_MAX_SPEED_2             S2 最高速度2 复位速度，0.01 rad/sec^2
        1000,                  // 0035     T1_MAX_SPEED_2             T1 最大速度2, 第二阶段(信息获取段)速度0.01 rad/sec^2
        240,                   // 0036     V1阀门关闭位置，步
        240,                   // 0036     V2阀门关闭位置，步
        350,                   // 0038     V3阀门关闭位置，步
};

//==========================================================
// DIAGNOSTIC
//==========================================================
ushort diagnostic = 0;               // 诊断寄存器
ushort bus_message_count = 0;        // 总线上消息数量
ushort bus_error_count = 0;          // 总线上通讯错误数量
ushort bus_exception_count = 0;      // 总线上异常应答数量
ushort server_message_count = 0;     // 下位机消息数量
ushort server_no_response_count = 0; // 下位机未响应消息数量
ushort server_exception_count = 0;   // 下位机异常应答消息数量
ushort server_busy_count = 0;        // 下位机状态忙数量
ushort bus_char_overrun_count = 0;   // 总线字符过载（Overrun）数量

ushort server_status = 0; // 下位机状态

uchar program_status = 0;
bit ps_listen_only = 0;    // 只听模式
bit ps_server_busy = 0;    // 设备忙
bit ps_sensor_error_1 = 0; //  设备传感器错误1
bit ps_sensor_error_2 = 0; //  设备传感器错误2

uchar event_count;
uchar event_log[MAX_EVENT_COUNT];
